const express = require('express');
const mysql = require('mysql2');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const cors = require('cors');

const app = express();
app.use(cors());
app.use(express.json());

// 连接 MySQL 数据库
const db = mysql.createConnection({
  host: 'localhost',
  user: 'root', // 替换为你的 MySQL 用户名
  password: 'qkl4016335', // 替换为你的 MySQL 密码
  database: 'game_db' // 替换为你的数据库名
});

db.connect(err => {
  if (err) throw err;
  console.log('MySQL 已连接');
});

// 注册路由
app.post('/register', async (req, res) => {
  const { username, password } = req.body;
  const hashedPassword = await bcrypt.hash(password, 10); // 加密密码
  db.query(
    'INSERT INTO users (username, password, progress) VALUES (?, ?, ?)',
    [username, hashedPassword, 1],
    (err, result) => {
      if (err) return res.status(500).send('注册失败');
      res.send('用户注册成功');
    }
  );
});

// 登录路由
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  db.query('SELECT * FROM users WHERE username = ?', [username], async (err, results) => {
    if (err) return res.status(500).send('服务器错误');
    if (results.length === 0) return res.status(404).send('用户不存在');
    const user = results[0];
    const isMatch = await bcrypt.compare(password, user.password);
    if (!isMatch) return res.status(401).send('密码错误');
    const token = jwt.sign({ id: user.id }, 'your_secret_key', { expiresIn: '1h' }); // 生成 JWT
    res.json({ token });
  });
});

// 获取用户进度
app.get('/progress', (req, res) => {
  const token = req.headers['authorization'];
  if (!token) return res.status(401).send('未提供 token');
  jwt.verify(token, 'your_secret_key', (err, decoded) => {
    if (err) return res.status(500).send('token 验证失败');
    db.query('SELECT progress FROM users WHERE id = ?', [decoded.id], (err, results) => {
      if (err) return res.status(500).send('查询失败');
      res.json(results[0]);
    });
  });
});

// 更新用户进度
app.put('/progress', (req, res) => {
  const token = req.headers['authorization'];
  const { progress } = req.body;
  if (!token) return res.status(401).send('未提供 token');
  jwt.verify(token, 'your_secret_key', (err, decoded) => {
    if (err) return res.status(500).send('token 验证失败');
    db.query('UPDATE users SET progress = ? WHERE id = ?', [progress, decoded.id], (err) => {
      if (err) return res.status(500).send('更新失败');
      res.send('进度已更新');
    });
  });
});

app.listen(3000, () => console.log('服务器运行在端口 3000'));